#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 4e2 + 10;
const int inf=2e18;
int n, m, q;
int dist[maxn][maxn];

void solve(){
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){ // 距离初始化为最大值
		for(int j=1;j<=n;j++){
			dist[i][j]=inf;
		}
		dist[i][i]=0;
	}
	for(int i=1;i<=m;i++) {
		int u, v, w;
		cin>>u>>v>>w;
		dist[u][v]=min(w, dist[u][v]); // 这里一定要注意, 取最小值
		dist[v][u]=min(w, dist[v][u]); // 因为可能两点之间可能有多条路
	}
	
	// floyd 求多源最短路, 时间复杂度为 O(n^3), 所以数据范围 <= 500
	for(int k=1;k<=n;k++){ // 中途经过的点
		for(int i=1;i<=n;i++){ // 起始点
			for(int j=1;j<=n;j++){ // 结束点
				dist[i][j]=min(dist[i][j], dist[i][k]+dist[k][j]);
			}
		}
	}
	
	for(int i=1;i<=q;i++){
		int st, ed;
		cin>>st>>ed;
		cout<<(dist[st][ed]==inf?-1:dist[st][ed])<<'\n';
	}
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
